home *** CD-ROM | disk | FTP | other *** search
- unit NameSpc3U;
-
- {$ifdef Ver90} { Delphi 2.0x }
- {$define DelphiLessThan3}
- {$define DelphiLessThan4}
- {$define DelphiLessThan5}
- {$endif}
- {$ifdef Ver93} { C++ Builder 1.0x }
- {$define DelphiLessThan3}
- {$define DelphiLessThan4}
- {$define DelphiLessThan5}
- {$endif}
- {$ifdef Ver100} { Delphi 3.0x }
- {$define DelphiLessThan4}
- {$define DelphiLessThan5}
- {$endif}
- {$ifdef Ver110} { C++ Builder 3.0x }
- {$define DelphiLessThan4}
- {$define DelphiLessThan5}
- {$endif}
- {$ifdef Ver120} { Delphi 4.0x }
- {$define DelphiLessThan5}
- {$endif}
- {$ifdef Ver125} { C++Builder 4.0x }
- {$define DelphiLessThan5}
- {$endif}
-
- interface
-
- uses
- {$ifdef DelphiLessThan3}
- SHDOCVW,
- {$else}
- SHDocVw_TLB,
- {$endif}
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, ComCtrls, OleCtrls, ExtCtrls;
-
- type
- TForm1 = class(TForm)
- lstSpecialFolder: TListBox;
- Panel1: TPanel;
- procedure FormCreate(Sender: TObject);
- procedure lstSpecialFolderClick(Sender: TObject);
- private
- WebBrowser: TWebBrowser;
- end;
-
- var
- Form1: TForm1;
-
- implementation
-
- uses
- {$ifdef DelphiLessThan3}
- OleAuto, Ole2,
- {$else}
- ComObj, ActiveX,
- {$endif}
- ShlObj;
-
- {$R *.DFM}
-
- {$ifdef DelphiLessThan3}
- type
- OleVariant = Variant;
- {$endif}
-
- var
- Malloc: IMalloc;
- {$ifdef DelphiLessThan4}
- EmptyParam: OleVariant;
-
- const
- CSIDL_INTERNET = $0001;
- CSIDL_ALTSTARTUP = $001d; // DBCS
- CSIDL_COMMON_ALTSTARTUP = $001e; // DBCS
- CSIDL_COMMON_FAVORITES = $001f;
- CSIDL_INTERNET_CACHE = $0020;
- CSIDL_COOKIES = $0021;
- CSIDL_HISTORY = $0022;
- {$endif}
- {$ifdef DelphiLessThan3}
- const
- CSIDL_COMMON_STARTMENU = $0016;
- CSIDL_COMMON_PROGRAMS = $0017;
- CSIDL_COMMON_STARTUP = $0018;
- CSIDL_COMMON_DESKTOPDIRECTORY = $0019;
- CSIDL_APPDATA = $001a;
- CSIDL_PRINTHOOD = $001b;
- {$endif}
-
- type
- TFolder = record
- Name: String;
- ID: Cardinal;
- end;
- const
- Folders: array[0..29] of TFolder = (
- (Name: 'CSIDL_DESKTOP'; ID: CSIDL_DESKTOP),
- (Name: 'CSIDL_INTERNET'; ID: CSIDL_INTERNET),
- (Name: 'CSIDL_PROGRAMS'; ID: CSIDL_PROGRAMS),
- (Name: 'CSIDL_CONTROLS'; ID: CSIDL_CONTROLS),
- (Name: 'CSIDL_PRINTERS'; ID: CSIDL_PRINTERS),
- (Name: 'CSIDL_PERSONAL'; ID: CSIDL_PERSONAL),
- (Name: 'CSIDL_FAVORITES'; ID: CSIDL_FAVORITES),
- (Name: 'CSIDL_STARTUP'; ID: CSIDL_STARTUP),
- (Name: 'CSIDL_RECENT'; ID: CSIDL_RECENT),
- (Name: 'CSIDL_SENDTO'; ID: CSIDL_SENDTO),
- (Name: 'CSIDL_BITBUCKET'; ID: CSIDL_BITBUCKET),
- (Name: 'CSIDL_STARTMENU'; ID: CSIDL_STARTMENU),
- (Name: 'CSIDL_DESKTOPDIRECTORY'; ID: CSIDL_DESKTOPDIRECTORY),
- (Name: 'CSIDL_DRIVES'; ID: CSIDL_DRIVES),
- (Name: 'CSIDL_NETWORK'; ID: CSIDL_NETWORK),
- (Name: 'CSIDL_NETHOOD'; ID: CSIDL_NETHOOD),
- (Name: 'CSIDL_FONTS'; ID: CSIDL_FONTS),
- (Name: 'CSIDL_TEMPLATES'; ID: CSIDL_TEMPLATES),
- (Name: 'CSIDL_COMMON_STARTMENU'; ID: CSIDL_COMMON_STARTMENU),
- (Name: 'CSIDL_COMMON_PROGRAMS'; ID: CSIDL_COMMON_PROGRAMS),
- (Name: 'CSIDL_COMMON_STARTUP'; ID: CSIDL_COMMON_STARTUP),
- (Name: 'CSIDL_COMMON_DESKTOPDIRECTORY'; ID: CSIDL_COMMON_DESKTOPDIRECTORY),
- (Name: 'CSIDL_APPDATA'; ID: CSIDL_APPDATA),
- (Name: 'CSIDL_PRINTHOOD'; ID: CSIDL_PRINTHOOD),
- (Name: 'CSIDL_ALTSTARTUP'; ID: CSIDL_ALTSTARTUP),
- (Name: 'CSIDL_COMMON_ALTSTARTUP'; ID: CSIDL_COMMON_ALTSTARTUP),
- (Name: 'CSIDL_COMMON_FAVORITES'; ID: CSIDL_COMMON_FAVORITES),
- (Name: 'CSIDL_INTERNET_CACHE'; ID: CSIDL_INTERNET_CACHE),
- (Name: 'CSIDL_COOKIES'; ID: CSIDL_COOKIES),
- (Name: 'CSIDL_HISTORY'; ID: CSIDL_HISTORY));
-
- procedure TForm1.FormCreate(Sender: TObject);
- var
- Loop: Cardinal;
- begin
- for Loop := Low(Folders) to High(Folders) do
- lstSpecialFolder.Items.AddObject(
- Folders[Loop].Name, TObject(Folders[Loop].ID));
- WebBrowser := TWebBrowser.Create(Self);
- TControl(WebBrowser).Parent := Panel1;
- WebBrowser.Align := alClient;
- end;
-
- function ILGetSize(PIDL: PItemIDList): DWord; stdcall; external 'Shell32.Dll' index 152;
-
- function PIDLToVariant(PIDL: PItemIDList): Variant;
- var
- PIDLSize: Integer;
- ArrayPtr: Pointer;
- begin
- PIDLSize := ILGetSize(PIDL);
- Result := VarArrayCreate([0, PIDLSize-1], varByte);
- ArrayPtr := VarArrayLock(Result);
- try
- Move(PIDL^, ArrayPtr^, PIDLSize)
- finally
- VarArrayUnlock(Result)
- end;
- end;
-
- procedure TForm1.lstSpecialFolderClick(Sender: TObject);
- var
- URL: OleVariant;
- PIDL: PItemIDList;
- begin
- OleCheck(SHGetSpecialFolderLocation(0,
- Integer(lstSpecialFolder.Items.Objects[lstSpecialFolder.ItemIndex]), PIDL));
- try
- URL := PIDLToVariant(PIDL);
- WebBrowser.Navigate2(URL, EmptyParam, EmptyParam, EmptyParam, EmptyParam);
- finally
- Malloc.Free(PIDL)
- end
- end;
-
- initialization
- {$ifdef DelphiLessThan4}
- TVarData(EmptyParam).VType := varError;
- TVarData(EmptyParam).VError := $80020004; {DISP_E_PARAMNOTFOUND}
- {$endif}
- ShGetMalloc(Malloc);
- end.
-